package dominio;

import java.util.ArrayList;

import org.uqbar.commons.utils.Observable;

@Observable
public class Nivel {

	protected String nombre;
	protected Tablero tableroDeJuego;
	protected int puntajeMinimo;
	protected int cantidadMaximaDeMovimientos;
	protected ArrayList<Objetivo> objetivos;
	protected Dificultad dificultad;
	private int indiceObjetivo;
	
		
	public Nivel(Dificultad dificultad,String nombreNivel, int cantFilasTablero, int cantColumnasTablero, int puntajeMinimo, int cantMovimientosMaximos) {
		this.indiceObjetivo = 0 ;
		this.nombre = nombreNivel;
		this.tableroDeJuego = new Tablero(dificultad,cantFilasTablero, cantColumnasTablero);
		this.puntajeMinimo = puntajeMinimo;
		this.cantidadMaximaDeMovimientos = cantMovimientosMaximos;
		this.objetivos = new ArrayList<Objetivo>();
		this.dificultad = dificultad;
	}
	
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Tablero getTableroDeJuego() {
		return tableroDeJuego;
	}

	public void setTableroDeJuego(Tablero tableroDeJuego) {
		this.tableroDeJuego = tableroDeJuego;
	}

	public int getPuntajeMinimo() {
		return puntajeMinimo;
	}

	public void setPuntajeMinimo(int puntajeMinimo) throws UserException {
		
		if (Validacion.esNegativo(puntajeMinimo)){
			throw new UserException("El numero no puede ser negativo");			
		}else{
			this.puntajeMinimo = puntajeMinimo;
		}
	}

	public int getCantidadMaximaDeMovimientos() {
		return cantidadMaximaDeMovimientos;
	}

	public void setCantidadMaximaDeMovimientos(int cantidadMaximaDeMovimientos) throws UserException {
		if	(Validacion.esNegativo(cantidadMaximaDeMovimientos)){
			throw new UserException("El numero no puede ser negativo");
		}else{
			this.cantidadMaximaDeMovimientos = cantidadMaximaDeMovimientos;
		}
	}

	public ArrayList<Objetivo> getObjetivos() {
		return objetivos;
	}
	
	public void agregarObjetivo(Objetivo objetivo) {
		objetivo.setIndice(this.getIndiceObjetivo());
		this.getObjetivos().add(objetivo);
		this.setIndiceObjetivo(this.getIndiceObjetivo() + 1);
	}

	public void setObjetivos(ArrayList<Objetivo> objetivos) {
		this.objetivos = objetivos;
	}

	public Dificultad getDificultad() {
		return dificultad;
	}

	public void setDificultad(Dificultad dificultad) {
		this.dificultad = dificultad;
	}

	protected int getIndiceObjetivo() {
		return indiceObjetivo;
	}

	protected void setIndiceObjetivo(int indiceObjetivo) {
		this.indiceObjetivo = indiceObjetivo;
	}

}
